package com.example.myblog01.web.admin;

import com.example.myblog01.dao.BlogServiceDao;
import com.example.myblog01.pojo.Tag;
import com.example.myblog01.service.TagService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.web.PageableDefault;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

@Controller
@RequestMapping("/admin")
public class TagController {

    @Autowired
    private TagService tagService;
    @Autowired
    private BlogServiceDao blogServiceDao;

    @GetMapping("/tags")
//    传递排序(@PageableDefault(size = 3,sort = {"id"},direction = Sort.Direction.DESC) Pageable pageable){  就是10条数据分一页 以id排序 按照倒序
    public String types(@PageableDefault(size = 3, sort = {"id"}, direction = Sort.Direction.DESC)
                                Pageable pageable, Model model) {
//        从数据库中取出 Model model传给前端 前端拿到page对象进行映射
        model.addAttribute("page", tagService.ListTag(pageable));
        System.out.println(tagService.ListTag(pageable));
        return "admin/tags";
    }

    //    跳转增加分类页面
    @GetMapping("/tags/input")
    public String input(Model model) {
//        进入增加分类的时候先给一个空type 让前端拿到
        model.addAttribute("tag", new Tag());

        return "admin/tags-input";
    }


    //    @PathVariable 把前端的值传过来  编辑操作
    @GetMapping("/tags/{id}/input")
    public String editInput(@PathVariable Long id, Model model) {
//       点击编辑 进入input页面  把编辑的值从上一页传过来   typeService.getType(id)的值放到type里面   前端会获得type值并显示 1111
        model.addAttribute("tag", tagService.getTag(id));

//        编辑后修改
        return "admin/tags-input";

    }


    //    添加分类 RedirectAttributes Attributes  返回前端信息
    @PostMapping("/tags")
    public String post(Tag tag, RedirectAttributes attributes) {

        Tag tag1 = tagService.getTagByName(tag.getName());
        //            Attributes.addFlashAttribute("message","标题重复 请重新输入！");
        if (tag1 != null) {//可以在数据库查到这个分类 就是重复
            System.out.println("chongfu--------------------");
            attributes.addFlashAttribute("message", "不可重复添加");
//            return "admin/types-input";
        } else {
            //        写入数据库
            Tag t = tagService.savetag(tag);
            if (t == null) {
                attributes.addFlashAttribute("message", "添加失败！");
            } else {
                attributes.addFlashAttribute("message", "添加成功！");
            }

        }
        return "redirect:/admin/tags";
    }


    //    添加分类 RedirectAttributes Attributes  返回前端信息   BindingResult result存储返回的信息
//    这个是编辑的时候进行改数据的 在public String editInput(@PathVariable Long id,Model model){之后
    @PostMapping("/tags/{id}")
    public String editpost(Tag tag, RedirectAttributes attributes, @PathVariable Long id) {


        Tag tag1 = tagService.getTagByName(tag.getName());
        //            Attributes.addFlashAttribute("message","标题重复 请重新输入！");
        if (tag1 != null) {//可以在数据库查到这个分类 就是重复
            attributes.addFlashAttribute("message", "标题重复");
//            return "admin/types-input";
        } else {
            //        写入数据库
            Tag t = tagService.updateTag(id,tag);
            if (t == null) {
                attributes.addFlashAttribute("message", "更新失败！");
            } else {
                attributes.addFlashAttribute("message", "更新成功！");
            }

        }
        return "redirect:/admin/tags";
    }


    @GetMapping("/tags/{id}/delete")
    public String delete(@PathVariable Long id, RedirectAttributes attributes) {

        tagService.deletetag(id);
        attributes.addFlashAttribute("message", "删除成功！");
        return "redirect:/admin/tags";

    }


}
